home *** CD-ROM | disk | FTP | other *** search
/ Megahits 5 / Megahits 5 (1994)(GTI - Rhein-Main-Soft)(DE)(Disc 2 of 2)[!].iso / archive / print / hwgpostbeta2.lha / HWGPOST / History < prev    next >
Encoding:
Text File  |  1994-06-05  |  25.5 KB  |  588 lines

  1. #
  2. # $Id: History,v 1.10 1994/06/05 17:29:31 heinz Exp $
  3. #
  4.  
  5. This is the history from the original 1.7 source up to now:
  6.  
  7.     2.0 HWG internal
  8.  
  9.         - SAS/C 6.x compatibility
  10.  
  11.         - Added 24 bit capabilites. Note that any of the 24 plane ptrs can
  12.           be set to NULL to achieve "partial" rendering of bitplanes. This
  13.           way you can render e.g. a 300 dpi A4 24 bit image one plane
  14.           at a time even on a small machine doing 24 passes. Afterwards you
  15.           could combine the planes on HD to a full image. This seems to be
  16.           easier than rendering clips with a depth of 24 bit.
  17.  
  18.         - sethalftonephase.
  19.  
  20.         - integrated Tom Rokicki's fixes.
  21.  
  22.         - handling of illegal type 3 encodings (well sort of).
  23.  
  24.  
  25.     2.1 HWG still not public
  26.  
  27.         - After a virtual memory restore the current font setup was totally
  28.           messed up, which resulted in a invalidfont error in the best case.
  29.           Worse cases were possible.
  30.           I fixed this by removing a few global (Yuck!) font variables and
  31.           integrating them into the graphics state. As a side effect calls
  32.           to show are now faster.
  33.  
  34.         - For errstackoverflow and errdictstackoverflow the stacks were not
  35.           cleared as the should be according to Adobe.  The fix for the
  36.           operandstack is complete. For the dictstack and execstack there
  37.           might be still a problem. I currently have no idea how to solve
  38.           multiple stack overflows and the Adobe manual doesn't really tell
  39.           what should happen if the execution stack runs over its limit.
  40.  
  41.         - For the first time I put it into RCS.
  42.  
  43.     22  HWG still not public
  44.  
  45.         - The new local/global VM scheme seems to be working now.
  46.           The dictstack is like in a level 2 implementation now.
  47.           The overhead needed triggers an increase of memory use of about
  48.           80% for all objects. I don't see a way to reduce this if I want
  49.           to keep going to level 2. No idea yet on how to implement a nice
  50.           garbage collection without adding _major_ overhead to object
  51.           handling. At least a restore does a true memory free now.
  52.  
  53.         - New operators: setglobal, currentglobal, gcheck, scheck,
  54.                          glyphshow, <<, >>, undef, arct,
  55.                          setstrokeadjust, currentstrokeadjust,
  56.                          setbbox.
  57.  
  58.         - Neither setbbox nor the strokeadjust stuff is tested.
  59.  
  60.         - The strokeadjust stuff doesn't really do a decent strokeadjust
  61.           currently. It is more of an experiment right now.
  62.  
  63.         - GlobalFontDirectory is now there, (Shared variant, too).
  64.  
  65.         - putinterval now deals with packed arrays.
  66.  
  67.         - execstack now correctly clears the attributes for all copied
  68.           objects.
  69.  
  70.         - dictionaries conform to level 2 now and expand as needed.
  71.  
  72.         - undef is implemented. It doesn't reduce the dictionary size. It
  73.           just invalidates the entry. (Note: This is not a typenull!)
  74.  
  75.         - null is no longer an operator but a constant.
  76.  
  77.         - The complete system name table according to the adobe reference
  78.           manual appendix F is now implemented.
  79.  
  80.         - The object types are now numbered according to the red book,
  81.           page 113, table 3.14.
  82.  
  83.         - Hashing in nametoken() should be a little faster now.
  84.  
  85.         - clippath will no longer return an empty clipping path. Instead
  86.           it will return a zero area path at (0,0) device space.
  87.  
  88.         - <~ASCII85~> implemented, not tested.
  89.  
  90.         - Some speedups in scantoken.
  91.  
  92.         - Only PaintTypes 0 and 2 are accepted now, not tested.
  93.  
  94.         - CDevProc handling put in, not tested.
  95.  
  96.         - added 'a' and '+' modes to file opening, not tested.
  97.  
  98.         - defineuserobject/undefineuserobject/execuserobject, not tested.
  99.  
  100.         - filter mechanism in place, eexec runs on top of it now.
  101.           dct, ccittfax, and lzw filters missing, proc and string input not
  102.           tried.
  103.  
  104.         - Real BlueValues with a zero fractional part are now accepted to
  105.           allow use of broken fonts.
  106.  
  107.         - /loadfont in init.ps discards garbage on the operand stack left
  108.           by the font.
  109.  
  110.         - filenameforall implemented. I need this functionality for the
  111.           resource ops. Limited testing.
  112.  
  113.         - setobjectformat, currentobjectformat implemented. Not tested.
  114.  
  115.         - error handling should be pretty much level 2 compliant now
  116.           except for "binary" and stackoverflow handling inside the error
  117.           handler itself. Not really tested.
  118.           stackoverflow handling inside the error functions is a nasty one,
  119.           as we don't have Level 2 compliant expanding stacks. This
  120.           actually doesn't matter, as even a "true" level 2 interpreter
  121.           could run out of memory in that situation. It seems to be an
  122.           obscure and undefined case. I handle it my way. At least it
  123.           should not crash.
  124.  
  125.         - character showing could be a little faster now. Hashing for
  126.           it does not need multiplications anymore. It uses shifts and
  127.           additions.
  128.  
  129.         - status should handle a string arg now. Not tested.
  130.  
  131.         - renamefile, deletefile, fileposition, setfileposition
  132.           implemented. Not tested.
  133.  
  134.     22.3 HWG still not public
  135.  
  136.         - callextfunc now no longer public. It is nasty stuff anyway.
  137.  
  138.         - Now the names @vmhwm, @prompts instead of vmhwm, prompts.
  139.  
  140.         - many internal speedups and simplifications. Don Knuth said that
  141.           "premature optimization is the root of all evil.". This is of
  142.           course true, but I mainly cleaned up quite some code to make
  143.           it more readable to me and "reduced" definitely unneeded type
  144.           sizes. The speedups came as a positive side effect, though they
  145.           are probably not that noticeable with standard PostScript code.
  146.  
  147.         - imaging and filling now in separate source files. It was all too
  148.           big IMHO.
  149.  
  150.         - For displays with less than 100 dpi on at least one axis, a
  151.           default halftone frequency of 30 instead of 60 is chosen now.
  152.           This gives at least some halftoning on screen as default which
  153.           makes many pictures look much nicer. I am not sure that this
  154.           conforms to the B&W book where it is said that 60 is returned as
  155.           default, but it gives better results for B.J.User. So what the
  156.           heck ...
  157.  
  158.         - When grestore behaves like a noop because there is nothing to
  159.           restore, the halftone screens are no longer invalidated.
  160.  
  161.         - copy is now level 2 compliant for dictionaries. No attribute
  162.           changes anymore for the destination.
  163.  
  164.         - There was some unlogical code in calclogicaldepth (pun intended)
  165.           which IMHO could have failed under special circumstances. Should
  166.           be safer now.
  167.  
  168.         - When closing an eexec file, the dictstack is popped only if there
  169.           is sysdict on top of it. Anything else is silently ignored to
  170.           avoid recursion caused by the error handler (which can cause
  171.           files to be closed, too).
  172.  
  173.         - Implemented a ForceBold mechanism for type 1 fonts. If
  174.           ForceBold is true and a stem would be rendered 1 pixel wide
  175.           because its width is >= 1.3 and < 1.5 it will be thickened to two
  176.           pixels. 1.3 seems to give visually acceptable results. 1.25
  177.           as limit for rounding up looks pretty unreadable already.
  178.  
  179.     22.4 HWG still not public
  180.  
  181.         - StdXW and StemSnapX implemented. "Snapping" should work when the
  182.           delta to the actual width is less than 1.0 _pixel_.
  183.  
  184.         - Implemented FamilyBlues and FamilyOtherBlues.
  185.  
  186.         - selectfont is now built in and behaves correctly.
  187.  
  188.         - Major rework of the font machinery to help adding the composite font
  189.           extensions. Now most of the vars needed for rendering are cached
  190.           at setfont time. I trade memory for speed.
  191.  
  192.     22.5 HWG still not public
  193.  
  194.         - Moved the ForceBold limit up to 1.4. 1.3 just doesn't look too good.
  195.  
  196.         - Major rework of the font caching. The font cache size can now be
  197.           changed (needed for setcacheparams) and with a tiny little change
  198.           the efficiency of the font cache has gone up it seems.
  199.  
  200.         - Implemented setcacheparams, currentcacheparams.
  201.  
  202.     22.6 HWG still not public
  203.  
  204.         - Setup internals for the implementation of User Parameters. This causes
  205.           changes to VM handling, font handling, and the interpreter stack setup.
  206.           All other values are currently noops.
  207.  
  208.         - currentuserparams, setuserparams, setvmthreshold implemented.
  209.           Currently we don't have any garbage collection. So the value you set with
  210.           setvmthreshold does nothing.
  211.  
  212.     22.7 HWG still not public
  213.  
  214.         - Somewhere in 22.7 I went to SAS/C 6.51.
  215.  
  216.     22.8 HWG still not public
  217.  
  218.         - xshow, yshow, xyshow implemented. Seem to work well.
  219.  
  220.         - missing flush in error message output added.
  221.  
  222.         - rectfill, rectclip, rectstroke.
  223.  
  224.         - half a ton of const keywords added to many functions.
  225.  
  226.         - setgstate, gstate, currentgstate. Not tested.
  227.  
  228.         - forall should no longer enumerate read protected keys.
  229.           I am not exactly sure that this is correct behaviour, though.
  230.  
  231.         - kshow resets the current font after executing the proc if
  232.           necessary.
  233.  
  234.         - findresource will behave as in a "small memory" situation as
  235.           Adobe names it. That is, it will never fiddle with the VM mode
  236.           even for type 3 fonts, unlike e.g. Display PostScript does
  237.           according to Adobe.
  238.  
  239.         - moved definefont and undefinefont over to using resource
  240.           primitives. I don't even know right now if it will compile. ;^)
  241.           Uhm, as you see, undefinefont should be available now, too.
  242.  
  243.         - Implemented @RegisterDiskResource to tell HWGPOST what external
  244.           resources are available.
  245.  
  246.         - findfont is using resources now, too.
  247.  
  248.         - init.ps is setting up the disk resources now!
  249.  
  250.         - eexec should behave like run now. It should automatically close
  251.           the file it creates on EOF _and_ on any other termination! This
  252.           should fix "{eexec} stopped" like constructs which used to leave
  253.           systemdict on the dictionary stack.
  254.  
  255.         - findfont, definefont, and undefinefont are now defined in terms
  256.           of resource operators as described in the R&W book.
  257.  
  258.         - ISOLatin1Encoding, StandardEncoding, and findencoding are now
  259.           defined in terms of resource operators as described in the R&W
  260.           book.
  261.  
  262.         - Split up font handling and show handling even more. Another
  263.           source file postshow.c is now available.
  264.  
  265.     22.9 HWG still not public
  266.  
  267.         - minor cosmetic reworks in some publically visible files
  268.  
  269.     22.10 HWG first public beta release
  270.  
  271.         - currentcolortransfer returned garbage. Should be fixed now.
  272.  
  273.         - Internal preparations for setting up color spaces!
  274.  
  275.         - setcolor implemented. Not tested.
  276.  
  277.         - setoverprint. Note that this is a no op currently!
  278.  
  279.         - currentoverprint.
  280.  
  281.         - created postcolor.c with all the colorspace handling stuff.
  282.  
  283.         - Family[Other]Blues check still had a bug that showed with the "d"
  284.           of the Times-Italic I have here. Should be fixed now.
  285.  
  286.         - I commented out the halftonephase ops for now. This will need
  287.           much work _after_ patterns are done. Any halftonephase != 0 will
  288.           probably slow done rendering a lot then.
  289.  
  290.         - sethalftone, currenthalftone, general halftone dictionary
  291.           support. Not tested at all.
  292.  
  293.         - This just came to mind. Did I mention that the scanner no longer
  294.           uses the isspace() macro, but truly checks according to the R&W
  295.           book specs for white space? This has been in there for quite some
  296.           time.
  297.  
  298.         - Added provision for true CMYK rendering into the bitplanes
  299.           instead of RGBW on the fly. This has actually been done
  300.           earlier already, but now it is enabled. Not tested.
  301.  
  302.         - For the pattern color space, I need a masking feature. So I
  303.           enhanced the device structure to provide for a mask.
  304.  
  305.         - Big problems with the image ops and handling of the Decode array
  306.           fixed. It wasn't decoded correctly anyway and it wasn't used at
  307.           all for gray scale devices.
  308.  
  309.         - A missing flush in effect mixed error output and output
  310.           by e.g. =, ==, pstack in an inappropriate way.
  311.  
  312.     22.11 HWG internal
  313.  
  314.         - /version should be a string now. Sorry for the inconvenience.
  315.  
  316.         - curveto with the same start and end point now works as intended.
  317.  
  318.         - pathforall now copies the path into an internal buffer before
  319.           enumerating it. This way changes to the current path while
  320.           pathforall is active no longer hurt the result.
  321.  
  322.         - Commented out sethalftone/currenthalftone and setcolor for now.
  323.           They are not fully functional yet, and their presence might
  324.           confuse valid PostScript files.
  325.  
  326.         - Serious bug in handling of parameters for the image operators
  327.           resulted in errors for 8 bits per sample. Found this by accident
  328.           only. :-(
  329.  
  330.     22.12 HWG release for NOVA.
  331.  
  332.         - True halftone phase support is back. It should be general enough
  333.           to be a base for patterns. Rendering of halftone screens is
  334.           slower now than before. I might add a special optimized halftone
  335.           function for standard filling though that runs fast for any x
  336.           shift of 0 or by a multiple of 8 pixels.
  337.  
  338.         - Fixed a bug that could possibly mess up halftoning for very
  339.           small vertical rendering. Never noticed this though.
  340.  
  341.         - Added deviceinfo to make /processcolors in statusdict easier.
  342.           processcolors has been added, too (In init.ps!). Why I did this
  343.           now? I just got news about /processcolors and before I forget
  344.           about it, I add it.
  345.  
  346.         - Bookman-Light showed me a possible problem with eexec decoding.
  347.           Though I think that Bookman-Light actually violates type 1 font
  348.           specs, I added special code to the file handling to work around
  349.           the problem for IBM font style binary encoded eexec portions.
  350.           The above is a euphemism for "hack added to make ugly stuff
  351.           work".
  352.  
  353.           Note: Anyone complaining about a font not working is required to
  354.                 provide me with a legal copy of the font for my own use
  355.                 from now on. Argh!
  356.  
  357.           Sidenote: Bookman-Light 001.003 is buggy according to Adobe. In
  358.                     001.004, the problem is supposedly fixed.
  359.  
  360.         - Work on Separation/Indexed colorspaces to get all the interfaces
  361.           for patterns set up. Tricky and not yet visible to the user.
  362.           Probably not for a while.
  363.  
  364.         - To get best performance and memory use for any halftoning or
  365.           patterns, you should have a width of the cell that is a multiple
  366.           of eight device pixels. Any halftone phase other than a multiple
  367.           of eight will slow down cell rendering. Any width other than
  368.           a multiple of eight will (sometimes considerably) increase memory
  369.           use. This is especially important for users of halftone
  370.           dictionaries. The cell will be replicated in x direction until a
  371.           byte aligned width is achieved. So e.g. for a 9 pixel wide cell,
  372.           the actual internal width and memory requirement will be 9 * 8 ==
  373.           72 pixel per line, which can be evenly divied by 8. If I did not
  374.           do it like that, rendering would not take long, but forever.
  375.           Actually it is not a new invention. The default halftone screens
  376.           always did it like that. I used this for halftone screens
  377.           specified via dictionaries only, and I have reason to assume that
  378.           I'll need it for patterns.
  379.  
  380.         - eexec reworked again. It now uses a destructor to pop the system
  381.           dictionary. The file handling is back to normal. No strange stack
  382.           handling within closing of files anymore. I feel that this is
  383.           good news.
  384.  
  385.         - Interesting enough, the eexec rework led me to a problem with the
  386.           implementation of resource ops while debugging. Tricky
  387.           manual stack manipulation after a resource op caused an error
  388.           could cause a crash. Should be robust now.
  389.  
  390.         - setdevparams, currentdevparams. They are dummies that don't do
  391.           very much. setdevparams will always give an error and
  392.           currentdevparams returns an empty dictionary.
  393.  
  394.         - Reworked halftone validating mechanism in my quest for patterns.
  395.           I made it look more "black box" for the callers which should help
  396.           me a lot in the future. As a side effect a few unnecessary
  397.           invalidations of halftone screens could be removed.
  398.  
  399.         - Color handling behaves better now, too. Setting a colorspace and
  400.           setting the colors is much cleaner internally now and colors will
  401.           be only set once not twice for every colorspace/color change. Oh
  402.           well. Not exactly true. sethsbcolor will first set the colorspace
  403.           and with that the initial color, and then the requested hsb color
  404.           will be set. That is what you get for using strange stuff.
  405.  
  406.         - I'll have to design a general bitmap caching scheme within the VM
  407.           handling. This will cover hopefully characters, patterns, and
  408.           forms. Maybe I can even do something about user paths then, but I
  409.           doubt it. While thinking about this and looking at the current
  410.           font cache handling, I could fix a possible hole in font type
  411.           checking and improve VM efficiency with save/restore
  412.           combinations. Strange how things hang together sometimes.
  413.  
  414.         - For the Pattern color space, the font cache will be ignored. A
  415.           rendering function would be needed that I am not willing to
  416.           design to support rendering of the font cache in any reasonable
  417.           way. So with patterns all characters will be rendered the slow
  418.           way.
  419.  
  420.         - The interrupt signals will be checked now in '=', '==', and in
  421.           'pstack'. While doing this, I added correct defines for the
  422.           signals to postlib.h. I added defines for the garbage collection
  423.           that does not yet exist, too.
  424.  
  425.         - Changed style of error display to something supposedly much more
  426.           Adobe like.
  427.  
  428.         - Changed rounding factors for setstrokeadjust to 0.25, i.e. I use
  429.           the 1/4 method suggested in "PostScript by Example". Should give
  430.           slightly better results. Why didn't I think of that in the first
  431.           place?
  432.  
  433.         - Interesting enough there was a bug in VM save/restore handling.
  434.           restore would not correctly restore things in all circumstances
  435.           because marking of allocations was off by one.
  436.  
  437.         - Handling and closing of the currentfile was not exactly "ok". It
  438.           should work better now, and currentfile should never return
  439.           "wrong" file handles. Uhm well, if no file exists, currentfile
  440.           will return %stdin to return something. There is not really a
  441.           concept of an invalid file object.
  442.  
  443.         - There should no longer be any "hanging" file open calls when an
  444.           error occurs. When a file is closed, it is closed now. No fake
  445.           close handling anymore to keep the interpreter happy. I
  446.           originally missed a paragraph in the R&W book saying how it works
  447.           and messed it up. Now it is done right (I hope).
  448.  
  449.         - Time for a freeze.
  450.  
  451.     22.13 HWG internal
  452.  
  453.         - Threshold halftoning was ... uhm ... totally broken. It should
  454.           work now. This paragraph doesn't tell how much time I spent on it.
  455.           As a positive side effect of the rework, the halftone cache is
  456.           now smarter. Going from black to white shold be as fast now
  457.           as going from white to black when asking for halftones.
  458.  
  459.         - sethalftone is now available.
  460.  
  461.         - Still a "typo" in the new error message format corrected.
  462.  
  463.         - There could still be "hanging" file open calls when the execution
  464.           stack was popped, e.g. on error or quit. Now any files
  465.           encountered while popping the execution stack will be closed.
  466.           This should help a lot.
  467.  
  468.         - Note: kshow does not create a loop context currently! I'll fix
  469.           this when I am into composite fonts. I'll need to invest some
  470.           thought into this. Colorspaces are still first on my list.
  471.  
  472.         - BTW, if you guys out there want CIE color spaces, buy a decent
  473.           book on the subject, and send it to me. The R&W book isn't all
  474.           that clear, and afterall it would be nice if I didn't have to
  475.           spend all my money on this. :-) If nothing like this happens, CIE
  476.           color spaces won't come soon.
  477.  
  478.         - In systemdict you will now find /=string with a length of 128.
  479.  
  480.         - Added the destructor concept to vm restore handling to make cache
  481.           flushing independent of vm handling.
  482.  
  483.         - name table handling is now more black box, too. I need all this
  484.           black box handling to implement the new general caching scheme.
  485.           A small change to the hashing in name token seems to have helped
  486.           lookup performance.
  487.  
  488.         - Added @calluserhook. Not tested yet.
  489.  
  490.             mark <args> <hookadr> <msgadr> @calluserhook
  491.  
  492.             ==>
  493.  
  494.             mark <resargs> <resint>
  495.  
  496.           ints, reals, bools, or strings may be used as args with a maximum
  497.           number of 8 arguments. The values are put into an array of longs
  498.           that is passed as object address to the hook. For strings two
  499.           slots in the array are used for address and length. On return the
  500.           values of ints, bools, and reals will be copied back into the
  501.           internal PS objects. The called function runs on the context of
  502.           post.library and might need to set up A4 from e.g. hook->h_Data
  503.           to make use of its local near data segment. No assumptions may be
  504.           made about post.library's context! It is private stuff!
  505.  
  506.           All this should help people needing to interface to external code
  507.           a lot.
  508.  
  509.         - The new general caching scheme is in place now. While it has more
  510.           overhead than the old font cache, there does not seem to be a
  511.           performance hit as hashing and caching is a little smarter.
  512.  
  513.         - For blue values any reals are now accepted and converted to
  514.           integers.
  515.  
  516.         - Some cleanup to the font and show handling for the new caching
  517.           scheme.
  518.  
  519.         - exit always had a bug. It would look below the lower end of the
  520.           exec stack. One object too much. Ouch.
  521.  
  522.         - kshow now has a loop context that can be exited via exit. I don't
  523.           have composite fonts yet, sorry.
  524.  
  525.         - While testing pattern generation, I found that gstate object
  526.           handling was in fact totally broken. The paths were not saved
  527.           correctly. This works now. Otherwise patterns would not work.
  528.  
  529.         - Patterns seem to work now. Please note that patterns are sort of
  530.           slow to render because there is a lot of work to do for this
  531.           including floating point calculations when a cached pattern is
  532.           imaged onto the page. Patterns are also memory hungry. If you know
  533.           the bounding box in device space (i.e. in pixels of the
  534.           bitplane!), you can estimate how much memory patterns eat. They
  535.           use bitplanes in the size of the bounding box. One mask bitplane
  536.           is always needed and for colored patterns you'll need one
  537.           pattern bitplane per device bitplane. Currently there is no
  538.           setsystemparams call and the maximum amount of bytes for the
  539.           pattern cache is ~60K. As we don't have a garbage collection yet,
  540.           allocated memory for the pattern cache will stay allocated until
  541.           it is either reused or invalidated by a VM restore.
  542.  
  543.         - Hopefully not too many bugs lurk inside pattern handling. BELIEVE
  544.           ME, PATTERNS ARE TRICKY TO HANDLE!
  545.  
  546.         - As I said above, drawing characters with patterns does not use
  547.           the font cache and probably never will. It is slower of course
  548.           but it works the same and doesn't add tons of special handling
  549.           to rendering.
  550.  
  551.         - Corrected a sign bug that messed up 360 degree arcs with arcn.
  552.           This one has been in there since at least 1.7. I found this while
  553.           testing patterns.
  554.  
  555.     22.14 HWG the pattern freeze.
  556.  
  557.         - The band rendering operators are now named "@currentband" and
  558.           "@setband". To keep compatibility to old post.library usage, I
  559.           added a kludge to init.ps to define the old names in terms of the
  560.           new names. Using the old names is strongly discouraged, though!
  561.  
  562.         - Oh well, I forgot to mention that the masking feature contained
  563.           in the struct PSextdevice works and may be used. If it wouldn't
  564.           be working, patterns would not work at all.
  565.  
  566.         - An interesting comment on the side is that the interpreter source
  567.           is still fairly portable even with those many changes. So if I
  568.           was ever to find a computer with a better OS than the Amiga, I
  569.           could take the interpreter with me. Don't fear anything, though.
  570.           There isn't any better OS around for me as far as I can see.
  571.  
  572.         - Cleaned up names for extended PSsignalint() flags.
  573.  
  574.         - Added missing PSerrstr prototype and pattern cache default sizes.
  575.  
  576.     22.15 HWG
  577.  
  578.         - Just found a bug when testing the release version. Font caching
  579.           would not work correctly.
  580.  
  581.         - I totally forgot to mention that XUID's should work for fonts and
  582.           patterns.
  583.  
  584.     22.16 HWG Pattern Release
  585.  
  586. *** EOT ***
  587.  
  588.